#include "FenetreAttenteJoueur.h"

#include "../Composant/Bouton.h"

#ifndef WIN32
	#include <unistd.h>
#endif

FenetreAttenteJoueur::FenetreAttenteJoueur(Client *c , SDL_Surface *ecran , bool createur) : Fenetre("Attente de joueur",ecran)
{
    this->cli = c;
    table = new SDL_Table(1,ecran);
    table->setTitre("pseudo",0);
    if(createur){
        string tab[1];
        tab[0] = c->getNom();
        table->add(tab);
    }
    this->createur = createur;
    cli->nonPersistant();
}

void FenetreAttenteJoueur::miseAJourListe(){
    //on va devoir lire sur le socket qui nous reli au serveur pour voir tout les clients connecter
    int lu ;
    char taille;
    //on va essayer de lire le nombre de joueur
    cli->recevoirMessage(&taille , sizeof(char) , &lu);

    if(taille == 42){//si on recoi 42 c'est que celui qui a crer la partie a quitter
        Fenetre::afficherMessage("mise a jour liste >> le createur de la partie a quitter !!!");
        fin = true;
        retourAfficher = false;
        return;
    }else if(taille == 105){//si la taille est 105 c'est le lancement de la partie
        fin = true;
        retourAfficher = true;
        return ;
    }

    if(lu != -1 && taille > 0)
        table->removeAll();
    else//si on a rien lut ou si la taille est = a 0 on a rien a mettre a jour alors on quitte
        return;

     for(int i = 0 ; i < (int) taille ; i++){
        char tailleNom = 0;
        //on va lire la taille du nom
        for(lu = -1 ; lu == -1 ; )
            cli->recevoirMessage(&tailleNom , 1 , &lu);

        char* nom = new char[tailleNom+1];
        for(lu = -1 ; lu == -1;)
            cli->recevoirMessage(nom , sizeof(nom) , &lu);

        string s[1];
        s[0] = nom;
        table->add(s);
    }

}

bool FenetreAttenteJoueur::afficher()
{
    retourAfficher = true;
    fin = false;
    SDL_Event event;

    FondBouton fBoutonIn;
	FondBouton fBoutonOut;
	fBoutonIn.image = IMG_Load("ressources/images/boutonMenu/boutonin.png");
	fBoutonIn.largeurDroite = 32;
	fBoutonIn.largeurGauche = 32;

	fBoutonOut.image = IMG_Load("ressources/images/boutonMenu/boutonout.png");
	fBoutonOut.largeurDroite = 32;
	fBoutonOut.largeurGauche = 32;

	SDL_Color noir = {0,0,0};

	Bouton *bquitter = new Bouton("quitter","ressources/police/arial.ttf",20,&fBoutonOut , &fBoutonIn);
	Bouton *blancer = new Bouton("lancer","ressources/police/arial.ttf",20,&fBoutonOut , &fBoutonIn);
	bquitter->setColorIn(noir);
    blancer->setColorIn(noir);

    bool estLancer = false;
    while(!fin)
    {
        Fenetre::afficher();
        SDL_PollEvent(&event);

        miseAJourListe();

        switch(event.type)
        {
        case SDL_QUIT:
           exit(1);
            break;
        }

        int somme ;
        if(createur)
            somme = bquitter->w() + blancer->w()+10 ;
        else
             somme = bquitter->w() ;

        bquitter->afficher(ecran,ecran->w/2 - (somme)/2  , ecran->h - bquitter->h() - 10 , event);
        if(createur)
            blancer->afficher(ecran , ecran->w/2 - somme/2 + 10 + bquitter->w() , ecran->h - bquitter->h() - 10 , event);

        if(bquitter->isClicked())
            fin = true;

		if(blancer->isClicked() && !estLancer){
		    estLancer = true;
		    char lancement = 1;
		    cli->envoyerMessage(&lancement ,1);
    	}

        SDL_Rect position;
        position.x = ecran->w/2 - table->getTaille().w/2;
        position.y = 100;
        table->afficher(position , event);
        SDL_Flip(ecran);
    }

     if(bquitter->isClicked())
        retourAfficher = false;

    delete blancer;
    delete bquitter;
    SDL_FreeSurface(fBoutonOut.image);
    SDL_FreeSurface(fBoutonIn.image);

    return retourAfficher;
}


